<?php

namespace App\Http\Controllers;

use App\Http\Requests\PasswordRequest;
use App\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //获取所有用户数据
        //$users = User::get();
        //获取分页数据
        //使用了paginate不能再使用get
        $users = User::paginate(5);
        //dd($users);
        //加载用户管理列表模板
        return view('user.index',compact('users'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    //查看资料的展示页面  $id代表参数
    public function show($id)
    {
        //通过当前$id找到当前用户的数据
        $user = User::find($id);
        //找到当前用户发布的所有博客内容
        $blogs = $user->blog;
        //dd($user->toArray());
        //加载用户管理列表模板
        return view('user.show',compact('user','blogs'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id  编辑
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //$id就是被点击需要编辑的编号
        $user = User::find($id);
        //权限策略
        //进入修改用户数据方法之后，应该判断当前用户是否有权限，如果有权限 继续往下执行，如果没有就停止
        //第一个参数是调用的权限策略的方法名称
        //第二个参数是需要操作的用户数据对象
        $this->authorize('update',$user);
        return view('user.edit',compact('user'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id,PasswordRequest $passwordRequest)
    {
        //获取当前用户$id对应的用户数据
        $user  =User::find($id);
        //dd($user);
        //接受post数据
        $post = $request->all();
        //dd($post);
        $user->name = $post['name'];
        //判断密码是否填写，如果填写就执行修改
        if($post['password']){
            $user->password = bcrypt($post['password']);
        }
        //写入数据库
        $user->save();
        //设置闪存信息并跳转
        session()->flash('success','个人资料编辑成功！');
        return redirect()->route('user.index');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //通过对应$id找到当前要删除的用户数据
        $user = User::find($id);
        //用权限策略进行能否删除操作的判断
        //第一个参数是调用的权限策略的方法名称
        //第二个参数是需要操作的用户数据对象
        $this->authorize('delete',$user);
        //直接使用模型调用destroy方法删除，需要给该方法传递需要删除数据的主键id
        User::destroy($id);
        //设置闪存信息并跳转
        session()->flash('success','删除成功！！！');
        return redirect()->route('user.index');
    }
}
